/* Shift-JIS */
/* UTF-8 */
/********************************************************************************/
/*ソース名:                                                                       */
/*　　pf_file.h                                                                   */
/*機能:                                                                         */
/*　　ファイルを管理するモジュール 　　　　　　　　　　　　　　　　                                                                                     */
/*作成者:                                                                       */
/*　　2010/06 関（CBSﾃｸﾉ）                                                                                                                                       */
/********************************************************************************/
/********************************************************************************/
/*変更履歴:                                                                     */
/*  COXから流用                                                                                                                                                           */
/*　　FildFind***　関数を追加                                                                                                                               */
/********************************************************************************/
#ifndef __PF_FILE_MAN
#define __PF_FILE_MAN
#ifndef __TYPEDEF_FOR_ALL
#include "typedef.h"
#endif
#ifndef __DEF_ID_FOR_ALL
#include "Id.h"
#endif

/*____[ オープンモード ]_________________________________________*/
#define FLMOD_READONLY		 (1)		/*!< 読み込み専用		*/
#define FLMOD_WRITEONLY		 (2)		/*!< 書き込み専用		*/
#define FLMOD_APPEND		(4|2)	/*!< 追加書き込み		*/
#define FLMOD_BIN_READONLY		 8		/*!< 読み込み専用		*/
#define FLMOD_BIN_WRITEONLY		 16		/*!< 書き込み専用		*/
#define FLMOD_BIN_APPEND		(32|16)	/*!< 追加書き込み		*/


#define FMERROR_EMPTYPATH		    1
#define FMERROR_ILLEGALPATH	        2
#define FMERROR_READFILE			3
#define FMERROR_WRITEFILE		    4
#define FMERROR_SEEKFILE			5
#define FMERROR_OPENFILE			6
#define FMERROR_CLOSEFILE		    7
#define FMERROR_MAKEDIR			    8
#define FMERROR_DELETEFILE		    9
#define FMERROR_NOTCLOSE		    11
#define FMERROR_NOROOMFORNEW	    12
#define FMERROR_ILLEGALOPENMODE	    13
#define FMERROR_ILLEGALHANDLE		14
#define FMERROR_ACCESS_CLOSEDFILE	15
#define FMERROR_READ_WRITEONLYFILE	16
#define FMERROR_WRITE_READONLYFILE	17
#define FMERROR_READ_HUGE_ROW		18
#define FMERROR_SEARCHDIR			19
#define FMERROR_NOT_BE_INITIALIZED  99

#define FMERROR_CODEMASK 0x0000FFFF
#define FMERROR_FILEIDXMASK 0x0000FFFF
#define FMERROR_FILEIDXBIT 16
#if defined(__STRICT_ANSI__)
#define FileInitialize   fl01_Initialize
#define FileTerminate    fl02_Terminate
#define FileOpen    fl03_Open
#define FileClose    fl04_Close
#define FileDelete    fl05_Delete
#define FileRead    fl06_Read
#define FileReadWholeLine fl07_ROneLine
#define FileWrite  fl08_Write
#define FileCheckExists fl09_Exists
#define FileCheckDir fl10_IsFolder
#define FileGetFullPath fl11_GetPath
#define FilePickUpName fl12_PickupName
#define FileFindOpen fl13_fdOpen
#define FileFindClose fl14_fdClose
#define FileFindFirst fl15_fdFirst
#define FileFindNext fl16_fdNext
#define FileGetLastError fl17_Error
#define FileIsInitialized fl18_IsInitialized
#endif
#define cMAX_FILEMANAGE		100	/* ﾌｧｲﾙ登録ｴﾘｱの最大個数	*/

#ifndef SIZE_FULLPATH
#define SIZE_FULLPATH 255
#endif
#ifndef OS_FULLPATH
#define OS_FULLPATH 1024
#endif
#if (__OS__ == _WINDOWS_XP ) || (__OS__ == _WINDOWS_7)
#define getfilestat _stat
#define _filestat _stat
#define  IS_FOLDER( sbuf )  (( sbuf.st_mode & S_IFMT ) == S_IFDIR)
#define makenewdir(a)  _mkdir(a)
#define FILE_HANDLE_NULL  0
#else
#define getfilestat stat
#define _filestat stat
#define  IS_FOLDER( sbuf )  (( sbuf.st_mode & S_IFMT ) == S_IFDIR)
#define makenewdir(a)  mkdir(a, 0777 )
#define FILE_HANDLE_NULL  NULL
#endif


/*_____[ ﾌｧｲﾙ/ﾃﾞｨﾚｸﾄﾘ検索情報 ]_________________________________________*/
/*! \typedef struct _FILEFIND
    \struct _FILEFIND
    \brief ﾌｧｲﾙ/ﾃﾞｨﾚｸﾄﾘ検索情報 */
typedef struct _FILEFIND
{
	DIR*		handle;					/*!< ﾃﾞｨﾚｸﾄﾘへのｱｸｾｽ情報	*/
	BOOL		fDir;					/*!< ﾃﾞｨﾚｸﾄﾘ名かどうか		*/
	CHAR		szStart[OS_FULLPATH+4];	/*!< 検索開始ﾊﾟｽ/ﾌｧｲﾙ		*/
	CHAR		szFound[OS_FULLPATH+4];	/*!< 検索したﾊﾟｽ/ﾌｧｲﾙ		*/
} FILEFIND, *PFILEFIND;


typedef struct __PATH_PIECES{
	PSZ buffer;
	struct __PATH_PIECES * per;
	struct __PATH_PIECES * next;
}PATH_PIECES;


extern S4   FileInitialize( VOID );
extern S4   FileTerminate( VOID );
extern S4   FileOpen( PSZ filepath, U2 openmode, HFILE * handlepointer );
extern S4   FileClose( HFILE handle );
extern S4   FileDelete( PSZ filepath );
extern S4   FileRead( HFILE handle, PVOID buf_output, U4 size_wish, U4 * size_actual);
extern S4   FileReadWholeLine( HFILE handle, PSZ *pointer_to_line, U4 * size_actual);
extern S4   FileWrite( HFILE handle, PVOID buf_input, U4 size );
extern S4   FileCheckExists( PSZ filepath );
extern S4   FileCheckDir( PSZ folderpath );
extern S4   FileGetFullPath( HFILE handle, CHAR * buf_output, U2 buf_size  );
extern PSZ   FilePickUpName( PSZ filepath );
extern PSZ   FilePickUpExt( PSZ filepath );
extern S4	FileFindOpen( PSZ folderpath, PFILEFIND buf_Info);			/* 検索の初期処理		*/
extern S4	FileFindClose( PFILEFIND buf_Info);							/* 検索の終了処理		*/
extern S4	FileFindFirst( PFILEFIND buf_Info);							/* 検索開始			*/
extern S4	FileFindNext( PFILEFIND buf_Info);							/*　次のファイルの検索	*/
extern S4   FileGetLastError( VOID );
extern BOOL	 FileIsInitialized( VOID );

extern U4  FileGetSize( PSZ filepath );
extern S4  FileGetModifyTime( PSZ filepath );
#define  BREAK_PATH1( path, pieces )  (pieces)=BreakPathToPieces(path);FreePathPieces();
#define  BREAK_PATH2( path1, pieces1, path2, pieces2 )  (pieces1)=BreakPathToPieces(path1);(pieces2)=BreakPathToPieces(path2);FreePathPieces();
/*
 * BreakPathToPieces
 * 機能：パスのデリミターでパスを分割する
 */
PATH_PIECES * BreakPathToPieces( PSZ pszPath );
/*
 * BreakPathToPiecesを呼び込んだ後この関数を呼ぶ必要。
 * FreePathPieces
 */
VOID FreePathPieces( VOID );
/************************************************************************/
/* 関 数 名 : IsFullPath													*/
/* 機    能 :	フルパスかを確認												*/
/************************************************************************/
extern BOOL IsFullPath( PSZ pszSrc );
/************************************************************************/
/* 関 数 名 : GetFullPath													*/
/* 機    能 :	フルパスかを確認												*/
/************************************************************************/
BOOL GetFullPath( PSZ pszSrc, PSZ buffer, U4 buffer_length );

/************************************************************************/
/* 関 数 名 : ConnectPath													*/
/* 機    能 :	パス繋ぎ処理												*/
/************************************************************************/
BOOL  ConnectPath( PSZ pszDst, PSZ pszSrc, U4 buffer_len );
/************************************************************************/
/* 関 数 名 : Convert2PortablePath													*/
/* 機    能 :	パス変更処理												*/
/************************************************************************/
VOID  Convert2PortablePath( PSZ pszPath );
#endif
/***********************end of file******************/
